#include "EffetBase.hpp"

using namespace std;
using namespace boost::assign;

/**
 * Constructeur usuel, qui initialise tous les champs de la classe
 * mère ainsi que les champs "locaux".
 *
 * La version par défaut crée un Materiau "par défaut", et fait un
 * dégradé de 4 nuances de gris (de blanc à noir) répartis de manière
 * équidistantes.
 *
 * @param refl coefficient de réflexion.
 * @param trans coefficient de transparence.
 * @param indice indice de réfraction.
 * @param reg coefficient de diffusion.
 * @param couleurs conteneur des instances de Couleur à utiliser.
 * @param mel conteneur des seuils à utiliser pour les mélanges de
 * couleurs.
 * @param coeff intensité de la perturbation.
 */
EffetBase::EffetBase(const double& refl, const double& trans,
		     const double& indice, const double& reg,
		     const vector< Couleur >& couleurs,
		     const vector< double >& mel, const double& coeff)
 : Materiau( refl, trans, indice, reg ), Coefficient( coeff )
{
  Colors.assign( couleurs.begin(), couleurs.end() );
  Melange.assign( mel.begin(), mel.end() );

  sort( Melange.begin(), Melange.end() );
}

/**
 * Constructeur initialisant l'instance, cette fois avec une
 * déformation des normales.
 *
 * @param refl coefficient de réflexion.
 * @param trans coefficient de transparence.
 * @param indice indice de réfraction.
 * @param reg coefficient de diffusion.
 * @param bruit intensité du bruit sur la normale.
 * @param couleurs conteneur des instances de Couleur à utiliser.
 * @param mel conteneur des seuils à utiliser pour les mélanges de
 * couleurs.
 * @param coeff intensité de la perturbation.
 */
EffetBase::EffetBase(const double& refl, const double& trans,
		     const double& indice, const double& reg,
		     const double& bruit, const vector< Couleur >& couleurs,
		     const vector< double >& mel, const double& coeff)
  : Materiau( refl, trans, indice, reg, bruit ), Coefficient( coeff )
{
  Colors.assign( couleurs.begin(), couleurs.end() );
  Melange.assign( mel.begin(), mel.end() );

  sort( Melange.begin(), Melange.end() );
}

/**
 * Le destructeur n'a rien de spécial à faire.
 */
EffetBase::~EffetBase()
{}
